package com.ainiyar.springweb.controller.admin;

import com.ainiyar.springweb.common.result.ResultResponse;
import com.ainiyar.springweb.pojo.admin.dto.AdminDto;
import com.ainiyar.springweb.pojo.admin.dto.PageDto;
import com.ainiyar.springweb.pojo.entity.Admin;
import com.ainiyar.springweb.service.AdminService;
import com.ainiyar.springweb.util.ToolsUtil;
import jakarta.annotation.Resource;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;

/**************************************
 * File Name : AdminsController
 * Created with : IntelliJ IDEA.
 * Author : 艾尼亚尔·毛拉吾提
 * QQ : 524155792  WeChat : ainiyar0124
 * Created Time : 2024/2/5  02:08
 * Desc :管理员管理控制器
 ***************************************/
@RestController
@RequestMapping("/admins")
public class AdminsController {
    @Resource
    private AdminService adminService;

    /**
     * 管理员列表
     *
     * @param pageDto  分页参数
     * @param adminDto 查询条件
     */
    @GetMapping("/list")
    @PreAuthorize("hasAuthority('admin:list')")
    public ResultResponse<Object> list(PageDto pageDto, AdminDto adminDto) {
        return adminService.lists(pageDto, adminDto);
    }

    /**
     * 新增管理员
     *
     * @param admin 新增参数
     * @return ResponseResult<String>
     */
    @PostMapping("/add")
    @PreAuthorize("hasAuthority('admin:add')")
    public ResultResponse<String> addAdmin(Admin admin) {
        if (ToolsUtil.isNull(admin.getAccount()) || ToolsUtil.isNullOrEmpty(admin.getAccount())) {
            return ResultResponse.Fail("管理员账号不得为空");
        }
        if (ToolsUtil.isNull(admin.getPassword()) || ToolsUtil.isNullOrEmpty(admin.getPassword())) {
            return ResultResponse.Fail("管理员登录密码不得为空");
        }
        if (!ToolsUtil.isNull(admin.getPassword()) && !ToolsUtil.isNullOrEmpty(admin.getPassword()) && admin.getPassword().length() < 6) {
            return ResultResponse.Fail("管理员登录密码不得小于6位");
        }
        boolean checkAdminName = adminService.checkAccount(admin.getAccount(), null);
        if (checkAdminName) {
            return ResultResponse.Fail("当前管理员账号已存在、请换别的管理员账号试试");
        }
        boolean admin_add = adminService.saveAddEditAdmin(admin);
        if (admin_add) {
            return ResultResponse.Success("新增管理员成功");
        }
        return ResultResponse.Fail("新增管理员失败");
    }
    /**
     * 修改管理员
     *
     * @param admin 修改参数
     * @return ResponseResult<String>
     */
    @PutMapping("/edit")
    @PreAuthorize("hasAuthority('admin:edit')")
    public ResultResponse<String> editAdmin(Admin admin) {
        if (ToolsUtil.isNull(admin.getAccount()) || ToolsUtil.isNullOrEmpty(admin.getAccount())) {
            return ResultResponse.Fail("管理员账号不得为空");
        }
        if (!ToolsUtil.isNull(admin.getPassword()) && !ToolsUtil.isNullOrEmpty(admin.getPassword()) && admin.getPassword().length() < 6) {
            return ResultResponse.Fail("管理员登录密码不得小于6位");
        }
        boolean checkAdminName = adminService.checkAccount(admin.getAccount(), admin.getId());
        if (checkAdminName) {
            return ResultResponse.Fail("当前管理员账号已存在、请换别的管理员账号试试");
        }
        boolean admin_edit = adminService.saveAddEditAdmin(admin);
        if (admin_edit) {
            return ResultResponse.Success("修改管理员成功");
        }
        return ResultResponse.Fail("修改管理员失败");
    }
    /**
     * 删除管理员
     * @param id 管理员id
     */
    @DeleteMapping("/del/{id}")
    @PreAuthorize("hasAuthority('admin:del')")
    public ResultResponse<String> delRegion(@PathVariable Long id) {
        if (adminService.deleteAdmin(id)) {
            return ResultResponse.Success("删除管理员成功");
        }
        return ResultResponse.Fail("删除管理员失败");
    }
    /**
     * 检查管理员账号是否已存在
     *
     * @param id      id
     * @param account 账号
     * @return string
     */
    @GetMapping("/check_account/{id}/{account}")
    public ResultResponse<String> getCheckAdminName(@PathVariable Long id, @PathVariable String account) {
        Long admin_id = id != 0 ? id : null;
        boolean checkAdminName = adminService.checkAccount(account, admin_id);
        if (checkAdminName) {
            return ResultResponse.Fail("当前管理员账号已存在、请换别的管理员账号试试");
        }
        return ResultResponse.Success("当前管理员账号不存在，可以使用");
    }
}

